﻿using BCCommon;
using BCDto.Sim.Admin.Admin;
using BCDto.TMS.MoveHouseConfig.MoveHouseSpecificationConfig;
using BCDto.TMS.MoveHouseConfig.MoveHouseSpecificationServiceConfig;
using BCDto.TMS.MoveHouseConfig.MoveHouseSpecificationServiceConfigOverWrite;
using System.Collections.Generic;

namespace BCService.TMS.MoveHouseConfig.MoveHouseSpecificationServiceConfig
{
    public interface IMoveHouseSpecificationServiceConfigService
    {
        /// <summary>
        /// 开通代理商服务
        /// </summary>
        /// <param name="moveHouseSpecificationServiceConfigIdList">搬家规格服务id列表</param>
        /// <param name="countyCode">区编码</param>
        /// <param name="admin">管理员</param>
        /// <returns></returns>
        bool Create(IEnumerable<long> moveHouseSpecificationServiceConfigIdList, string countyCode, AdminDto admin);
        /// <summary>
        /// 获取单个搬家规格服务信息
        /// </summary>
        /// <param name="moveHouseSpecificationServiceConfigId">搬家规格服务配置Id</param>
        /// <returns></returns>
        MoveHouseSpecificationServiceConfigDto GetById(long moveHouseSpecificationServiceConfigId);
        /// <summary>
        /// 获取代理商搬家服务价格
        /// </summary>
        /// <param name="admin"></param>
        /// <param name="countyCode">区编码</param>
        /// <param name="enabled">是否可用</param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        PageableList<MoveHouseSpecificationServiceConfigOverWriteViewDto> GetAllAgentPriceList(AdminDto admin, string countyCode, bool? enabled, int pageIndex, int pageSize);
        /// <summary>
        /// 获取总部搬家服务价格
        /// </summary>
        /// <param name="admin"></param>
        /// <param name="enabled">是否可用</param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        PageableList<MoveHouseSpecificationServiceConfigViewDto> GetAllPriceQuery(AdminDto admin, bool? enabled, int pageIndex, int pageSize);


        /// <summary>
        /// 获取规格(客户端)
        /// </summary>
        /// <param name="moveHouseConfigId">搬家设置id</param>
        /// <param name="countyCode">区编码</param>
        /// <returns></returns>
        IEnumerable<MoveHouseSpecificationConfigClientDto> GetSpecification(long moveHouseConfigId, string countyCode);

        /// <summary>
        /// 获取价格
        /// </summary>
        /// <param name="moveHouseConfigId">搬家设置id</param>
        /// <param name="agentRecordId">代理商id</param>
        /// <param name="countyCode">区编码</param>
        /// <returns></returns>
        IEnumerable<MoveHouseSpecificationServiceConfigPriceClientDto> GetPrice(long moveHouseConfigId,long? agentRecordId, string countyCode);
        /// <summary>
        /// 删除规格服务
        /// </summary>
        /// <param name="moveHouseSpecificationServiceConfigId">规格服务id</param>
        /// <param name="admin">管理员</param>
        /// <returns></returns>
        bool Delete(long moveHouseSpecificationServiceConfigId, AdminDto admin);

        /// <summary>
        /// 删除规格服务
        /// </summary>
        /// <param name="moveHouseSpecificationServiceConfigId">规格服务id</param>
        /// <param name="price">价格</param>
        /// <param name="admin">管理员</param>
        /// <returns></returns>
        bool UpdatePrice(long moveHouseSpecificationServiceConfigId,decimal price, AdminDto admin);
        /// <summary>
        /// 可用
        /// </summary>
        /// <param name="moveHouseSpecificationServiceConfigId">规格服务id</param>
        /// <param name="admin">管理员</param>
        /// <returns></returns>
        bool Enabled(long moveHouseSpecificationServiceConfigId, AdminDto admin);
        /// <summary>
        /// 禁用
        /// </summary>
        /// <param name="moveHouseSpecificationServiceConfigId">规格服务id</param>
        /// <param name="admin">管理员</param>
        /// <returns></returns>
        bool Disabled(long moveHouseSpecificationServiceConfigId, AdminDto admin);
        /// <summary>
        /// 获取全部的搬家服务
        /// </summary>
        /// <param name="admin">管理员</param>
        /// <returns></returns>
        IEnumerable<MoveHouseSpecificationServiceConfigViewDto> GetAllServiceQuery(AdminDto admin);
    }
}